import type { AxiosPromise } from "axios";
import type { FlowProcInstKey, FlowProcInstModel } from "../task/types";

import type {
  EntityApi,
  EntityReq,
  EntityModel,
  EntityPage,
  EntityKey,
} from "jmash-core";

// 接口
export interface FinishInstApi extends EntityApi {
  getKey(model: HiProcInstModel): HiProcInstKey;
  // 获取我的已办事项
  findPage(req: HiProcInstReq): AxiosPromise<HiProcInstPage>;
}

export interface HiProcInstKey extends EntityKey {
  procInstId?: string;
}

// 历史流程实例请求.
export interface HiProcInstReq extends EntityReq {
  // 租户.
  tenant?: string;
  // 当前页码.
  curPage?: number;
  // 页尺寸.
  pageSize?: number;
  // 排序名称.
  orderName?: string;
  // 是否升序排序.
  orderAsc?: boolean;
  // 优先级
  priority?: string;
  // 流程Key.
  procDefKey?: string;
  // 是否候选用户,默认否（分配用户）.
  candidate?: boolean;
  // 业务分类
  category?: string;
  // 是否包含优先级
  hasPriority?: boolean;
  procDefId?: string;
}

/**
 * 历史流程实例.
 */
export interface HiProcInstModel extends EntityModel {
  /**
   * ID.
   */
  id?: string;
  /**
   * 业务Key.
   */
  businessKey?: string;
  /**
   * 业务状态.
   */
  businessStatus?: string;
  /**
   * 流程定义ID.
   */
  processDefinitionId?: string;
  /**
   * 流程定义名称.
   */
  processDefinitionName?: string;
  /**
   * 流程定义Key.
   */
  processDefinitionKey?: string;
  /**
   * 流程定义版本.
   */
  processDefinitionVersion?: number;
  /**
   * 流程定义分类.
   */
  processDefinitionCategory?: string;
  /**
   * 部署ID.
   */
  deploymentId?: string;
  /**
   * 开始时间.
   */
  startTime?: string;
  /**
   * 结束时间.
   */
  endTime?: string;
  /**
   * 总用时(毫秒).
   */
  durationInMillis?: string;
  /**
   * 结束活动ID.
   */
  endActivityId?: string;
  /**
   * 创建用户.
   */
  startUserId?: string;
  /**
   * 开始活动ID.
   */
  startActivityId?: string;
  /**
   * 删除原因.
   */
  deleteReason?: string;
  /**
   * 父流程实例ID.
   */
  superProcessInstanceId?: string;
  /**
   * 租户.
   */
  tenantId?: string;
  /**
   * 实例名称.
   */
  name?: string;
  /**
   * 描述.
   */
  description?: string;
  /**
   * CallbackID.
   */
  callbackId?: string;
  /**
   * Callback类型.
   */
  callbackType?: string;
  /**
   * 引用ID.
   */
  referenceId?: string;
  /**
   * 引用类型.
   */
  referenceType?: string;
  propagatedStageInstanceId?: string;
}

/**
 * 历史流程实例Page.
 */
export interface HiProcInstPage extends EntityPage {
  /**
   * 流程实例列表.
   */
  results: Array<HiProcInstModel>;
  /**
   * 当前页码.
   */
  curPage: number;
  /**
   * 页尺寸.
   */
  pageSize: number;
  /**
   * 总记录数.
   */
  totalSize: number;
}
